#ifndef AC_COMMON_STRING_ENUMERATION_HPP_
#define AC_COMMON_STRING_ENUMERATION_HPP_

#include "common/parm_string.hpp"
#include "common/type_id.hpp"
#include "common/char_vector.hpp"

class StringEnumeration;
class Convert;

class StringEnumeration
{
public:
    typedef const char* Value;
    virtual bool at_end() const = 0;
    virtual const char* next() = 0;
    int ref_count_;
    TypeId type_id_;
    unsigned int type_id() {return type_id_.num;}
    int copyable_;
    int copyable() {return copyable_;}
    virtual StringEnumeration* clone() const = 0;
    virtual void assign(const StringEnumeration* other) = 0;
    CharVector temp_str;
    Convert* from_internal_;
    StringEnumeration() : ref_count_(0), copyable_(2), from_internal_(0) {}
    virtual ~StringEnumeration() {}
};

#endif  // AC_COMMON_STRING_ENUMERATION_HPP_
